#!/bin/bash


:<<EOF
    输入输出流 :
        Linux系统预留可三个文件描述符:0、1和2,  他们的意义如下所示:
        0——标准输入(stdin)
        1——标准输出(stdout)
        2——标准错误(stderr)


crontab -e

DATE_TIME_CMD="date +%Y%m%d_%H%M%S"
DATE_CMD="date +%Y-%m-%d"

#事先创建好日志路径, 以供存放日志记录
10 01    * * * cd /opt/trx-data-importer/var/log && mkdir -p import/$(${DATE_CMD}) && mkdir -p bbw-export/$(${DATE_CMD}) && mkdir -p pos_eticket/{dev,prod}/$(${DATE_CMD}) && mkdir -p  datamarket-sync/$(${DATE_CMD})   &&  mkdir - p dataPlatform-sync/$(${DATE_CMD})

*/5 *    * * * cd /opt/trx-data-importer && git pull >/dev/null 2>&1

38 07-23 * * * /usr/bin/flock -n    /opt/trx-data-importer/var/import.lock bash   /opt/trx-data-importer/bin/import.sh -e prod          >> /opt/trx-data-importer/var/log/import/$(${DATE_CMD})/$(${DATE_TIME_CMD}).log  2>&1


看到  2>&1  不知道是啥意思,  这里给你讲明白


EOF



read -r  -t 10 -n 20   -p "input username: "   username


echo  "your username is  ${username} "


# 正常指令输出流 ,  只要你命令是正确的, 就会输出正确的结果到屏幕中 ;  for  instance
ls -l   chapter2-variable/cin_cout.sh

# 如果我不想输出到屏幕,  我想输出到日志文件中,  那么需要借助  >  号来处理
ls -l   chapter2-variable/cin_cout.sh  >  temp/log.txt

#但是, 有时候我不知道我的命令是否能正确执行, 例如人家给的参数是否正确,
#服务器是否开启等, 我们都不知道, 总不能执行完了, 啥都不知道吧
ls -l   chapter2-variable/fin.txt  >  temp/log.txt
#这时候我们执行了错误的命令,  还能正常写入日志文件中吗?
# > 号 默认代表的是 1>  是标准的输出流, 即 命令正常执行后的输出流, 当命令错误的时候,  用 > 是无法输出到日志文件中的, 因为你用错符号了;

# 这个时候, 我们需要用的是  2>  , 表示把错误的 消息 输出到文本文件中
ls -l   chapter2-variable/fin.txt  2>  temp/log.txt

#好了, 错误的消息是输出到日志了, 正确的消息呢?
(   ls -l   chapter2-variable/cin_cout.sh   &&  ls -l   chapter2-variable/fin.txt      )  2>  temp/log.txt

#要想实现双重输出, 我们可以用双重定向
ls -l  chapter2-variable/cin_cout.sh   2>> temp/log.txt  1>>temp/log.txt
ls -l  chapter2-variable/fin.txt   2>> temp/log.txt  1>>temp/log.txt


# 两个输出文件,  这样写还是有点麻烦;  还可以简化成
ls -l  chapter2-variable/fin.txt   &>>  temp/log.txt

# 还有一个 无侵入式的写法
(echo  '无侵入式的写法' && ls -l  chapter2-variable/fin.txt )    >> temp/log.txt   2>&1


